# 练习:定义敌人类(姓名，攻击力10 -- 50，血量100 -- 200)
#    创建一个敌人对象，可以修改数据，读取数据。
# 使用 property(读取方法，写入方法）封装变量
class Enemy:
    def __init__(self, name, atk, hp):
        self.name = name
        self.atk = atk  # 不是实例数据，是类变量----类变量指向property对象，
        # property拦截对类变量的操作，转为对方法的操作，真实操作的数据是__atk
        self.hp = hp

    # 公开读写方法
    def get_atk(self):
        return self.__atk

    def set_atk(self, value):
        if 10 <= value <= 50:
            self.__atk = value
        else:
            raise ValueError("不在范围，请重新输入攻击力")

    atk = property(get_atk, set_atk)  # atk类变量  property拦截对atk类变量的读写操作

    def get_hp(self):
        return self.__hp

    def set_hp(self, value):
        if 100 <= value <= 200:
            self.__hp = value
        else:
            raise ValueError("不在范围，请重新输入血量")

    hp = property(get_hp, set_hp)


enemy01 = Enemy("貂蝉", 23, 100)
enemy01.hp = 150  # 27行
print(enemy01.hp)
